home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / libs / knowhow4 / harderr.cpp < prev    next >
C/C++ Source or Header  |  1994-10-10  |  2KB  |  128 lines

  1. #include <bios.h>
  2. #include <dos.h>
  3. #include <conio.h>
  4. #include <graphics.h>
  5. #include <string.h>
  6.  
  7.  
  8.  
  9. ///////////////////////
  10.  #pragma warn -par
  11.  
  12. char biosgetch()
  13. { char c;
  14.   do{
  15.     c=  bioskey(_KEYBRD_READ) &0xff;
  16.     }while (c=='\0');
  17.     return c;
  18. }
  19.  int getmode()
  20.  {
  21.    asm{
  22.     mov ax, 0x40
  23.     mov es, ax
  24.     mov bx, 0x49
  25.     mov al, byte ptr es:[bx]
  26.     xor ah,ah
  27.     }
  28.    return _AX;
  29.  }
  30.  
  31.  static buff[2000];
  32.  
  33. char  say_Retry_Or_Fail()
  34. { char *text= "Retry or Fail?";
  35.   char c;
  36.   int x1,y1,x2,y2;
  37.   int mode=getmode();
  38.    if (mode <=3 || mode==7)
  39.    {
  40.     x1=20;
  41.     x2=38;
  42.     y1=12;
  43.     y2=y1+2;
  44.     gotoxy(x1,y1);
  45.     textattr(4);
  46.     gettext(x1,y1,x2,y2,buff);
  47.     cprintf("░░░░░░░░░░░░░░░░░░");
  48.     gotoxy(x1+2,y1+1);
  49.     cprintf(text);
  50.     gotoxy(x1,y2);
  51.     cprintf("░░░░░░░░░░░░░░░░░░");
  52.     textattr(7);
  53.    }
  54.    else
  55.    {
  56.     int xc, yc, w, h;
  57.     xc= getmaxx() /2;
  58.     yc= getmaxy() /2;
  59.     w=(strlen(text)+2) * 8;
  60.     h=20;
  61.     x1=xc-w /2;
  62.     x2=xc+ w/2;
  63.     y1=yc- h/2;
  64.     y2=yc+ h/2;
  65.     int oldcolor=getcolor();
  66.     struct fillsettingstype  oldfillinfo;
  67.     getfillsettings (&oldfillinfo);
  68.     struct textsettingstype oldtexttypeinfo;
  69.     gettextsettings(&oldtexttypeinfo);
  70.  
  71.     setfillstyle(SOLID_FILL,WHITE);
  72.  
  73.     settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
  74.     settextjustify(CENTER_TEXT,CENTER_TEXT);
  75.     getimage(x1,y1,x2,y2,buff);
  76.  
  77.     bar(x1,y1,x2,y2);
  78.     setcolor(RED);
  79.     setwritemode(COPY_PUT);
  80.     outtextxy((x1+x2) /2, (y1+y2)/2,text);
  81.     setcolor(oldcolor);
  82.     setfillstyle(oldfillinfo.pattern,oldfillinfo.color);
  83.     settextstyle(oldtexttypeinfo.font,oldtexttypeinfo.direction,oldtexttypeinfo.charsize);
  84.     settextjustify(oldtexttypeinfo.horiz,oldtexttypeinfo.vert);
  85.    }
  86.     c= biosgetch();
  87.    if (mode <=3 || mode==7)
  88.    {
  89.      puttext(x1,y1,x2,y2,buff);
  90.    }
  91.    else
  92.    {
  93.     putimage(x1,y1,buff,COPY_PUT);
  94.    }
  95.    return c;
  96. }
  97.  
  98.  
  99. int handler(int errval,int ax,int bp,int si)
  100.     { char c; int code;
  101.     da_capo:
  102.  
  103.     c=say_Retry_Or_Fail();
  104.     switch(c)
  105.     {
  106.     case 'R': case 'r':
  107.        code=1;
  108.        break;
  109.     case 'F': case 'f':
  110.        code=0;
  111.        break;
  112.     default: goto da_capo;
  113.     }
  114.     hardresume(code);
  115.     return 2;   // ABORT;
  116.     }
  117.  
  118.  #pragma warn +par
  119.  
  120.  
  121. void setharderr()
  122. {
  123.  
  124.  harderr(handler);
  125. }
  126.  
  127.  
  128. #pragma startup setharderr 70